package org.cxn.tools.commons.poi.excel;

import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.CreationHelper;
import org.apache.poi.ss.usermodel.IndexedColors;

/**
 * Created by IntelliJ IDEA.
 * User: lenovo
 * Date: 11-12-19
 * Time: 上午11:23
 * To change this template use File | Settings | File Templates.
 */
public class MyHSSFCellStyle {
    /**
     * 纪录一个样式
     */
    private CellStyle style;

    /**
     * 获取当前最新样式
     *
     * @return
     */
    public CellStyle getStyle() {
        return style;
    }

    /**
     * 加载样式
     *
     * @param cellStyle
     * @return
     */
    public MyHSSFCellStyle load(CellStyle cellStyle) {
        this.style = cellStyle;
        return this;
    }

    /**
     * 设置excel表格的样式,对于常规单元格
     * 比如字体居中
     *
     * @param cellStyle
     * @return
     */
    public final CellStyle defaultStyle(CellStyle cellStyle) {
        // 设置单元格的横向和纵向对齐方式，具体参数就不列了，参考HSSFCellStyle
        cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
        cellStyle.setWrapText(true);
        return cellStyle;
    }

    /**
     * 设置单元格的文本方式为可多行编写方式 默认为flase单行模式 </br>
     * @param boo                                         </br>
     * @return                                            </br>
     */
    public final MyHSSFCellStyle setWrapText(boolean boo){
        this.style.setWrapText(boo);
        return this;
    }

    /**
     * 设置excel表格的样式__单元格对齐方式 <br/>
     *
     * @param a 水平 <br/>
     *          HSSFCellStyle.ALIGN_CENTER      水平居中   <br/>
     *          HSSFCellStyle.ALIGN_LEFT        靠左      <br/>
     *          HSSFCellStyle.ALIGN_RIGHT       靠右      <br/>
     *          HSSFCellStyle.ALIGN_CENTER_SELECTION     <br/>
     *          HSSFCellStyle.ALIGN_FILL        填充数据  <br/>
     *          HSSFCellStyle.ALIGN_GENERAL     整体的    <br/>
     *          HSSFCellStyle.ALIGN_JUSTIFY              <br/>
     * @param v 垂直 <br/>
     *          HSSFCellStyle.VERTICAL_BOTTOM    底部  <br/>
     *          HSSFCellStyle.VERTICAL_CENTER    居中  <br/>
     *          HSSFCellStyle.VERTICAL_TOP       顶部  <br/>
     *          HSSFCellStyle.VERTICAL_JUSTIFY        <br/>
     * @return this<br/>
     */
    public final MyHSSFCellStyle addAlignment(short a, short v) {
        // 设置单元格的横向和纵向对齐方式，具体参数就不列了，参考HSSFCellStyle
        this.style.setAlignment(a);
        this.style.setVerticalAlignment(v);
        return this;
    }

    /**
     * 设置边框                 <br/>
     *
     * @param border 边框粗细   <br/>
     *               HSSFCellStyle.BORDER_THIN  细的   <br/>
     *               HSSFCellStyle.BORDER_DOUBLE  双线   <br/>
     *               HSSFCellStyle.BORDER_HAIR  虚线1   <br/>
     *               HSSFCellStyle.BORDER_DASH_DOT  虚线2   <br/>
     *               HSSFCellStyle.BORDER_MEDIUM  常规粗线   <br/>
     *               HSSFCellStyle.BORDER_THICK   加粗线   <br/>
     * @param color  边框颜色       <br/>
     *               IndexedColors.BLACK.getIndex() 黑色  <br/>
     *               IndexedColors.GREEN.getIndex() 绿色  <br/>
     *               IndexedColors.BLUE.getIndex()  蓝色  <br/>
     *               IndexedColors.RED.getIndex()   红色  <br/>
     * @return
     */
    public final MyHSSFCellStyle addBoeder(short border, short color) {
        // 设置单元格的横向和纵向对齐方式，具体参数就不列了，参考HSSFCellStyle
        this.style.setBorderBottom(border);
        this.style.setBottomBorderColor(color);
        this.style.setBorderLeft(border);
        this.style.setLeftBorderColor(color);
        this.style.setBorderRight(border);
        this.style.setRightBorderColor(color);
        this.style.setBorderTop(border);
        this.style.setTopBorderColor(color);
        return this;
    }

    /**
     * 设置背景色         <br/>
     * @param color      <br/>
     *                   IndexedColors.AQUA.getIndex()
     *
     * @param pattern    <br/>
     *                   HSSFCellStyle.BIG_SPOTS
     * @return
     * @deprecated 没必要用这个
     */
    public final MyHSSFCellStyle addFillBackgroudColorPattern(short color,short pattern){

        this.style.setFillBackgroundColor(color);
        this.style.setFillPattern(pattern);
        return this;
    }

    /**
     *  设置前景色
     * @param color    <br/>
     *              IndexedColors.ORANGE.getIndex() 橘色表格填充色    <br/>
     * @param pattern  <br/>
     *              HSSFCellStyle.SOLID_FOREGROUND       <br/>
     * @return
     */
    public final MyHSSFCellStyle addFillForegroundColorPattern(short color,short pattern){

        this.style.setFillForegroundColor(color);
        this.style.setFillPattern(pattern);
        return this;
    }

    /**
     * 设置时间样式      <br/>
     * @param helper  wb.getCreationHelper()     <br/>
     * @param gs     m/d/yy h:mm       <br/>
     * @return                          <br/>
     */
    public final MyHSSFCellStyle addDateStyle(CreationHelper helper, String gs) {
        this.style.setDataFormat(helper.createDataFormat().getFormat(gs));
        return this;
    }




    /********************************************************************************************/
    private MyHSSFCellStyle() {
    }

    /**
     * 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
     * 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载.
     */
    private static class SingletonHolder {
        /**
         * 静态初始化器,由JVM来保证线程安全
         */
        private static MyHSSFCellStyle style = new MyHSSFCellStyle();
    }

    public final static MyHSSFCellStyle getInstance() {
        return SingletonHolder.style;
    }
}
